﻿using System;
using System.Linq;
using System.Web.UI;
using System.Web.UI.WebControls;
using ShoppingCart.Business.Logic;
using ShoppingCart.WebSite.Code;
using SC = ShoppingCart.Business.Entity;
using System.Configuration;
using System.Collections.Generic;

namespace ShoppingCart.WebSite.Admin
{
    public partial class Fletes : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Page.IsPostBack) return;
            LoadDepartamentos();
            LoadParametros();
        }

        protected void BtnGuardarFletesClick(object sender, EventArgs e)
        {
            try
            {
                foreach (GridViewRow row in gvDistritos.Rows)
                {
                    var idDistrito = Convert.ToInt32(row.Cells[0].Text);
                    var distrito = DistritoManager.Instancia.Obtener(idDistrito);
                    distrito.Flete = Convert.ToDecimal(((TextBox)row.FindControl("txtFlete")).Text);
                    DistritoManager.Instancia.Modificar(distrito);
                }
                litMensaje1.Text = "Costos por Fletes registrados satisfactoriamente.";
            }
            catch (Exception)
            {
                litMensaje1.Text = @"Ocurrio un error en el servidor, intentar de nuevo o mas despues.";
            }
        }

        protected void DdlDepartamentoSelectedIndexChanged(object sender, EventArgs e)
        {
            var idDepartamento = Convert.ToInt32(ddlDepartamento.SelectedValue);
            LoadProvincias(idDepartamento);
        }

        protected void DdlProvinciaSelectedIndexChanged(object sender, EventArgs e)
        {
            var idProvincia = Convert.ToInt32(ddlProvincia.SelectedValue);
            LoadDistritos(idProvincia);
        }

        protected void BtnGuardarParametrosClick(object sender, EventArgs e)
        {
            var parametros = new List<SC.Parametro>();
            parametros.Add(new SC.Parametro
                               {
                                   IdParametro = "A",
                                   Cantidad = Convert.ToInt32(txtCantidadA.Text),
                                   Descuento = Convert.ToDecimal(txtDescuentoA.Text)
                               });
            parametros.Add(new SC.Parametro
                               {
                                   IdParametro = "B",
                                   Cantidad = Convert.ToInt32(txtCantidadB.Text),
                                   Descuento = Convert.ToDecimal(txtDescuentoB.Text)
                               });
            parametros.Add(new SC.Parametro
                               {
                                   IdParametro = "C",
                                   Cantidad = Convert.ToInt32(txtCantidadC.Text),
                                   Descuento = Convert.ToDecimal(txtDescuentoC.Text)
                               });
            var path = Server.MapPath(ConfigurationManager.AppSettings["Parametros"]);
            ParametroManager.Instancia.Guardar(path, parametros);
        }

        private void LoadDepartamentos()
        {
            var departamentos = DepartamentoManager.Instancia.Listar(false);
            BindControl<SC.Departamento>.BindDropDownList(ddlDepartamento, departamentos);
            litMensaje1.Text = string.Empty;
            if (departamentos.Count != 0)
            {
                LoadProvincias(departamentos.First().IdDepartamento);
            }
            else
            {
                ddlProvincia.DataBind();
                gvDistritos.DataBind();
            }
        }

        private void LoadProvincias(int idDepartamento)
        {
            var provincias = ProvinciaManager.Instancia.ListarPorIdDepartamento(idDepartamento, true);
            BindControl<SC.Provincia>.BindDropDownList(ddlProvincia, provincias);
            litMensaje1.Text = string.Empty;
            if (provincias.Count != 0) LoadDistritos(provincias.First().IdProvincia);
            else gvDistritos.DataBind();
        }

        private void LoadDistritos(int idProvincia)
        {
            var distritos = DistritoManager.Instancia.ListarPorIdProvincia(idProvincia, true);
            BindControl<SC.Distrito>.BindGrid(gvDistritos, distritos);
            litMensaje1.Text = string.Empty;
        }

        private void LoadParametros()
        {
            var parametros = ParametroManager.Instancia.Listar(Server.MapPath(ConfigurationManager.AppSettings["Parametros"]));
            if (parametros.Count != 3) return;
            
            litParametroA.Text = parametros[0].IdParametro;
            txtCantidadA.Text = parametros[0].Cantidad.ToString();
            txtDescuentoA.Text = parametros[0].Descuento.ToString();

            litParametroB.Text = parametros[1].IdParametro;
            txtCantidadB.Text = parametros[1].Cantidad.ToString();
            txtDescuentoB.Text = parametros[1].Descuento.ToString();

            litParametroC.Text = parametros[2].IdParametro;
            txtCantidadC.Text = parametros[2].Cantidad.ToString();
            txtDescuentoC.Text = parametros[2].Descuento.ToString();
        }
    }
}
